#include <blackbox/blackbox.h>

#ifdef BUOLA_HAVE_PULSE

#include "cpulseloop.h"
#include "cpulsecontext.h"

namespace buola { namespace media { namespace pulse {

CPulseLoop::CPulseLoop()
    :   mDefaultContext(nullptr)
{
    mLoop=pa_threaded_mainloop_new();
    Start();
}

CPulseLoop::~CPulseLoop()
{
    delete mDefaultContext;

    Stop();
    pa_threaded_mainloop_free(mLoop);
}

void CPulseLoop::Start()
{
    pa_threaded_mainloop_start(mLoop);
}

void CPulseLoop::Stop()
{
    pa_threaded_mainloop_stop(mLoop);
}

CPulseContext &CPulseLoop::GetDefaultContext()
{
    if(!mDefaultContext)
    {
        Lock();
        mDefaultContext=new CPulseContext(*this,"buola");
        mDefaultContext->Connect();
        Unlock();
        mDefaultContext->WaitForConnection();
    }

    return *mDefaultContext;
}

CPulseLoop &get_default_loop()
{
    static CPulseLoop lLoop;

    return lLoop;
}

/*namespace pulse*/ } /*namespace media*/ } /*namespace buola*/ }

#endif //BUOLA_HAVE_PULSE
